
import config from '../../../mp.config.js';
import mitt from 'mitt';

//逻辑线程
export class JSCore {
    constructor(opts) {
        //parent就是小程序容器miniAppSandbox类
		this.parent=null;
        /**
         * worker可以创建子线程，子线程会在新的环境中执行，不会阻塞主线程。
         * worker保存new Worker()的实例
         */
		this.worker=null;

        this.event=mitt();

    }

    //初始化逻辑线程
    async init(){
        //wx app Page等方法都在这个线程里

        //调用服务器端的逻辑线程core.js
        const jsContent=await fetch(config.sdkUrl+"/logic/logic_sdk.js");
        const jsContentText=await jsContent.text();
        const jsBlob=new Blob([jsContentText],{type:"text/javascript"});

        //worker可以创建子线程，子线程会在新的环境中执行，不会阻塞主线程。
        //创建一个子线程
        this.worker=new Worker(window.URL.createObjectURL(jsBlob));
        //监听接收消息
        this.worker.addEventListener('message',(e)=>{
            const msg=e.data;
            //传给小程序容器miniAppSandbox.js,通信桥bridge.js
            this.event.emit('message',msg);
        })

    }
    //注册事件
    addEventListener(type,handler){
        this.event.on(type,handler);
    }
    //往逻辑层发送消息
    postMessage(msg){
        this.worker.postMessage(msg)
    }

}